home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / cdity / ModeProSrc.lha / Prefs / MPP_PI.c < prev    next >
C/C++ Source or Header  |  1999-01-11  |  16KB  |  813 lines

  1. //#include "/ModePro.h"
  2. //#include "mpp.h"
  3. #include "mppexterns.h"
  4. #include <stdio.h>
  5.  
  6. extern struct LG_Control *GadControl;
  7. extern LONG ActivePen;
  8. extern BOOL ClosePrefs;
  9. extern struct Window *Win;
  10. extern UWORD defaultpens[];
  11. extern UWORD NumDriPens;
  12. extern STRPTR MiscText[];
  13. extern ULONG ListToCyc[];
  14. extern  WORD CurrentList_2,
  15.              CurrentList;
  16. extern  LONG LVActive,
  17.              NodeCnt;
  18. extern ULONG ActivateStrGad;
  19. extern UBYTE EnvFile[],
  20.              EnvArcFile[];
  21. extern struct MPSem   *MPSem;
  22. extern struct List ForcedEditList;
  23. extern struct MPMessage *ForcedEditMsg;
  24. extern UBYTE    filename[513];
  25. extern struct Window   *Win;
  26.  
  27. void ReturnFEMsg(ULONG Code);
  28. BOOL SetDNFlag(struct DefaultNode *N, ULONG Flag, BOOL Set, BOOL Keyed);
  29.  
  30.  
  31. void GD_Type(LONG Code)
  32. {
  33.   if(Code>MAX_TYPE)
  34.     Code=0;
  35.   else
  36.     if(Code<0)
  37.       Code=MAX_TYPE;
  38.  
  39.   CurrentList_2=Code;
  40.   CurrentList=ListToCyc[Code];
  41.   LVActive=0;
  42.   UpdateGadgets();
  43. }
  44.  
  45. struct DefaultNode *GD_New(void)
  46. {
  47.   struct DefaultNode *n;
  48.   ULONG l;
  49.   
  50.   if(n=AllocDefaultNode(0))
  51.   {
  52.     if(CurrentList!=MPSEM_PLIST_SCREENMODES)
  53.       n->Def_Node.ln_Name=CopyString(MiscText[ITEM_NEW_NAME], MEMF_CLEAR | MEMF_PUBLIC);
  54.     else
  55.       n->Def_Node.ln_Name=GetModeName(0);
  56.       
  57.     n->Type=CurrentList;
  58.     n->OverscanType=1;
  59.     for(l=0;l<NumDriPens;l++)
  60.       n->Pens[l]=defaultpens[l];
  61.   
  62.     ObtainSemaphore(&MPSem->NodeSem);
  63.     LG_SetGadgetAttrs(GadControl,GD_LIST,
  64.                      GTLV_Labels      ,~0,
  65.                      GTLV_Selected    ,0,
  66.                      TAG_DONE);
  67.     AddHead(&MPSem->PromotionList[CurrentList],(struct Node *)n);
  68.     LVActive=0;
  69.         
  70.     ReleaseSemaphore(&MPSem->NodeSem);
  71.     UpdateGadgets();
  72.     ActivateStrGad=GD_NAME;
  73.   } 
  74.   return(n);
  75.  
  76. void GD_Save(void)
  77. {
  78.   ClosePrefs=TRUE;
  79.   ObtainSemaphore(&MPSem->NodeSem);
  80.   PrefSaveFile(EnvArcFile);
  81.   PrefSaveFile(EnvFile);
  82.   ReleaseSemaphore(&MPSem->NodeSem);
  83. }
  84.  
  85. void GD_Use(void)
  86. {
  87.   ClosePrefs=TRUE;
  88.   PrefSaveFile(EnvFile);
  89. }
  90.  
  91. void GD_Cancel(void)
  92. {
  93.   ObtainSemaphore(&MPSem->NodeSem);
  94.   LG_SetGadgetAttrs(GadControl,GD_LIST,
  95.                     GTLV_Labels,~0,TAG_DONE);
  96.   FreeAllDefLists(MPSem->PromotionList);
  97.   PrefLoadFile(EnvFile);
  98.   ReleaseSemaphore(&MPSem->NodeSem);
  99. //  LVActive=0
  100.   ClosePrefs=TRUE;
  101. }
  102.  
  103. LONG SSecs=0;SMicros=0;
  104. struct DefaultNode *DCNode;
  105.  
  106. void GD_List(LONG Item, BOOL Keyed, struct IntuiMessage *IMsg)
  107. {
  108.   struct DefaultNode *n;
  109.   BOOL fullupdate=0;
  110.  
  111.   if(Item<0 )
  112.     Item=NodeCnt-1;
  113.   else
  114.     if(Item>=NodeCnt)
  115.       Item=0;
  116.   
  117.   LVActive=Item;
  118.   
  119.   n=GetActiveNode();
  120.   if(Keyed)
  121.     LG_SetGadgetAttrs(GadControl,GD_LIST,
  122.                     GTLV_Selected   ,LVActive,
  123.                     TAG_DONE);
  124.                     
  125.   if(IMsg)
  126.   {
  127.     if(DoubleClick(SSecs,SMicros,IMsg->Seconds,IMsg->Micros) && DCNode==n)
  128.     {
  129.       SSecs=0;
  130.       SMicros=0;
  131.       if(n)
  132.       {
  133.         n->Flags^=DNF_NEVER_PROMOTE;
  134.         fullupdate=1;
  135.       }
  136.     }
  137.     else
  138.     {
  139.       SSecs  =IMsg->Seconds;
  140.       SMicros=IMsg->Micros;
  141.     }
  142.     DCNode =n;
  143.   }
  144.   if(fullupdate)
  145.   {
  146.     UpdateGadgets();
  147.   }
  148.   else
  149.   {
  150.     LG_SetGadgetAttrs(GadControl,GD_MOVE,
  151.                       GTSL_Max,       NodeCnt-1,
  152.                       GTSL_Level,    (NodeCnt-1)-LVActive,
  153.                       GA_Disabled,    FALSE,
  154.                       TAG_DONE);
  155.     SetDispGadgets(n);
  156.     SetFontGadgets(n);
  157.     SetSharedGadgets(n);
  158.     SetPublicGadgets(n);
  159.     SetHotKeyGadgets(n);
  160.     SetOptionGadgets(n);
  161.     Set3DGadgets(n);
  162.     SetBackdropGadgets(n);
  163.   }
  164.     
  165.   ActivateStrGad=GD_NAME;
  166. }
  167.  
  168. void GD_SelectName(struct DefaultNode *N)
  169. {
  170.   LG_SetGadgetAttrs(GadControl,GD_LIST,
  171.                            GTLV_Labels,~0,
  172.                            TAG_DONE);
  173.   SelectName(N);
  174.   LG_SetGadgetAttrs(GadControl,GD_LIST,
  175.                            GTLV_Labels,&MPSem->PromotionList[CurrentList],
  176.                            TAG_DONE);
  177. }
  178.  
  179. void GD_ModeSel(struct DefaultNode *N, LONG Mode, BOOL Keyed)
  180. {
  181.   LONG maxmode,minmode;
  182.   
  183.   if(Keyed)
  184.   {
  185.     // if keyed Mode is dirchange
  186.     Mode+=N->ModeSelect;
  187.   } 
  188.   
  189.   maxmode=MS_PROMOTE_MAX;//                                                                            (4.57.3)
  190.   switch(N->Type)
  191.   {
  192.     case MPSEM_PLIST_PUBLICSCREENS:
  193.       if(!Keyed)
  194.         Mode+=2;
  195.       minmode=2;
  196.       break;
  197.     default:
  198.       minmode=0;
  199.   }      
  200.   
  201.   if(Mode>maxmode)
  202.     Mode=minmode;
  203.   else
  204.     if(Mode<minmode)
  205.       Mode=maxmode;
  206.  
  207.   N->ModeSelect=Mode;
  208.   SetDispGadgets(N);
  209. }
  210.  
  211. void GD_SelMode(struct DefaultNode *N)
  212. {
  213.   switch(N->ModeSelect)
  214.   {
  215.     case MS_PROMOTE_MONITOR:
  216.       SelectMonitor(N);
  217.       break;
  218.     case MS_PROMOTE_SCREENMODE:
  219.     case MS_PROMOTE_REQUESTER:
  220.       SelectScreenMode(Win,N,0);
  221.       break;
  222.     case MS_PROMOTE_BEST_MODE://                                                                       (4.57.14)
  223.       SelectMonitor(N);//                                                                              (4.57.14)
  224.       break;//                                                                                         (4.57.14)
  225.   }
  226.   SetDispGadgets(N);
  227.   SetOptionGadgets(N);
  228. }
  229.  
  230. /*
  231. void GD_Overscan(struct DefaultNode *N, LONG Value, BOOL Keyed)
  232. {
  233.   if(Keyed)
  234.   {
  235.     Value+=N->OverscanType-DNODE_OSCANTYPE_MIN;
  236.   }
  237.   
  238.   if(Value>DNODE_OSCANTYPE_MAX-DNODE_OSCANTYPE_MIN)
  239.     Value=0;
  240.   else
  241.   {
  242.     if(Value<0)
  243.       Value=DNODE_OSCANTYPE_MAX-DNODE_OSCANTYPE_MIN;
  244.   }
  245.  
  246.   N->OverscanType=Value+DNODE_OSCANTYPE_MIN;
  247.   
  248.   if(Keyed)
  249.   {
  250.     SetDispGadgets(N);
  251.   }
  252. }
  253. */
  254.  
  255. void GD_Overscan(struct DefaultNode *N, LONG Value, BOOL Keyed)
  256. {
  257.   if(Keyed)
  258.   {
  259.     Value+=N->OverscanType;
  260.   }
  261.   else
  262.   {
  263.     Value+=DNODE_OSCANTYPE_MIN;
  264.   }
  265.   
  266.   if(Value>DNODE_OSCANTYPE_MAX)
  267.     Value=DNODE_OSCANTYPE_MIN;
  268.  
  269.   if(Value<DNODE_OSCANTYPE_MIN)
  270.     Value=DNODE_OSCANTYPE_MAX;
  271.  
  272.   N->OverscanType=Value;
  273.  
  274.   if(Keyed)
  275.   {
  276.     SetDispGadgets(N);
  277.   }
  278. }
  279.  
  280.  
  281.  
  282. void GD_Remove(struct DefaultNode *N)
  283. {
  284.   ObtainSemaphore(&MPSem->NodeSem);
  285.   LG_SetGadgetAttrs(GadControl,GD_LIST,
  286.                     GTLV_Labels,~0,TAG_DONE);
  287.   if(!(N->Def_Node.ln_Succ->ln_Succ))
  288.     if(LVActive>0)
  289.       LVActive--;
  290.   Remove((struct Node *)N);
  291.   FreeDNode(N);
  292.   ReleaseSemaphore(&MPSem->NodeSem);
  293.   NodeCnt=CountNodes(&MPSem->PromotionList[CurrentList]); 
  294.   UpdateGadgets();
  295. }
  296.  
  297. void GD_PenList(struct DefaultNode *N, LONG Item,BOOL Keyed)
  298. {
  299.   if(Keyed)
  300.   {
  301.     Item+=ActivePen;
  302.   }
  303.   
  304.   if(Item>=NumDriPens)
  305.     Item=0;
  306.   else
  307.     if(Item<0)
  308.       Item=NumDriPens-1;
  309.   
  310.   ActivePen=Item;
  311.   if(N->Look3D)
  312.   {
  313.     ActivateStrGad=GD_PENVAL;
  314.     SetPenValues(N->Pens);
  315.   }
  316.   else
  317.     SetPenValues(0);
  318. }
  319.  
  320.  
  321. void GD_Interleave(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  322. {
  323.   SetDNFlag(N,INTERLEAVE,Set,Keyed);
  324.  
  325.   if(Keyed)
  326.     SetOptionGadgets(N);
  327. }
  328.  
  329. BOOL SetDNFlag(struct DefaultNode *N, ULONG Flag, BOOL Set, BOOL Keyed)
  330. {
  331.   if(Keyed)
  332.   {
  333.     Set=!(N->Flags & Flag);
  334.   }
  335.   
  336.   N->Flags&=(~Flag);
  337.   if(Set)
  338.   {
  339.     N->Flags|=Flag;
  340.     return(1);
  341.   }
  342.   return(0);
  343.  
  344. }
  345.  
  346.  
  347.  
  348. void GD_Look3D(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  349. {
  350.   if(Keyed)
  351.     N->Look3D=!N->Look3D;
  352.   else
  353.     N->Look3D=Set;
  354.     
  355.   Set3DGadgets(N);
  356. }
  357.  
  358. void GD_AutoScroll(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  359. {
  360.   if(Keyed)
  361.     N->AutoScroll=!N->AutoScroll;
  362.   else
  363.     N->AutoScroll=Set;
  364.   
  365.   if(Keyed) 
  366.     SetOptionGadgets(N);
  367. }
  368. /*
  369. void GD_PenVal(struct DefaultNode *N, BOOL Flag)
  370. {
  371.   N->Pens[ActivePen]=GetGadNumber(GadControl,GD_PENVAL]);
  372.   if(imsg->Qualifier&3)
  373.   {
  374.     ActivePen--;
  375.     if(ActivePen<0) ActivePen=NumDriPens-1;
  376.   }
  377.   else
  378.   {
  379.     ActivePen++;
  380.     if(ActivePen>=NumDriPens) ActivePen=0;
  381.   }
  382.   ActivateStrGad=GD_PENVAL;
  383.   SetPenValues(N->Pens);
  384. }
  385. */
  386. void GD_ResetPens(struct DefaultNode *N)
  387. {
  388.   LONG l;
  389.  
  390.   if(N->Look3D)
  391.   {
  392.     ObtainSemaphore(&MPSem->NodeSem);
  393.     for(l=0;l<NumDriPens;l++)
  394.       N->Pens[l]=defaultpens[l];
  395.     ReleaseSemaphore(&MPSem->NodeSem);
  396.     SetPenValues(N->Pens);
  397.   }
  398. }
  399.  
  400. void GD_PickFont(struct DefaultNode *N)
  401. {
  402.   if(PickFont(Win,&N->Font))
  403.     SetFontGadgets(N);
  404. }
  405.  
  406. void GD_Center(struct DefaultNode *N, LONG Num, BOOL Keyed)
  407. {
  408.   if(Keyed)
  409.     Num+=N->CenterFlags;
  410.   
  411.   if(Num>MAX_CENTERFLAG)
  412.     Num=0;
  413.  
  414.   if(Num<0)
  415.     Num=MAX_CENTERFLAG;
  416.  
  417.   N->CenterFlags=Num;
  418.  
  419.   if(Keyed)
  420.     SetOptionGadgets(N);
  421. }
  422.  
  423. void GD_FAspect(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  424. {
  425.   SetDNFlag(N,FIXASPECT,Set,Keyed);
  426.   
  427.   if(Keyed)
  428.     SetFontGadgets(N);
  429. }
  430.  
  431. void GD_SFont(struct DefaultNode *N, LONG Code, BOOL Keyed)
  432. {
  433.   if(Keyed)
  434.   {
  435.     Code+=N->FontType;
  436.   }
  437.   
  438.   if(Code>=MAX_FONT)
  439.     Code=0;
  440.   else
  441.     if(Code<0)
  442.       Code=MAX_FONT-1;
  443.       
  444.   N->FontType=Code;
  445.   SetFontGadgets(N);
  446. }
  447.  
  448. void GD_PubOpt(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  449. {
  450.   if(Keyed)
  451.   {
  452.     Set=!(N->PubOptions);
  453.   }
  454.   
  455.   if(Set)
  456.   {
  457.     N->PubOptions=1;
  458.     ActivateStrGad=GD_PUBNAME;
  459.   }
  460.   else
  461.   {
  462.     N->PubOptions=0;
  463.   }
  464.  
  465.   SetPublicGadgets(N);
  466. }
  467.   
  468. void GD_DoDepth(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  469.   SetDNFlag(N,DEPTH,Set,Keyed);
  470.   
  471.   SetDepthGadgets(N);
  472. }
  473.   
  474. void GD_SharePens(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  475. {
  476.   if(SetDNFlag(N,SHAREPENS,Set,Keyed))
  477.   {
  478.     ActivateStrGad=GD_LOCKEDPENS;
  479.   }
  480.   SetSharedGadgets(N);
  481. }
  482.   
  483. void GD_HotKeyOpt(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  484. {
  485.   if(SetDNFlag(N,SCRHOTKEY,Set,Keyed))
  486.   {
  487.     ActivateStrGad=GD_HOTKEYSTR;
  488.   }
  489.   SetHotKeyGadgets(N);
  490. }
  491.   
  492. void GD_Palette(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  493. {
  494.   SetDNFlag(N,DNF_PALETTE,Set,Keyed);
  495.   SetPaletteGadgets(N);
  496. }
  497.  
  498. void GD_EditPalette(struct DefaultNode *N)
  499. {
  500.   switch(N->ModeSelect)
  501.   {
  502.     case MS_PROMOTE_SCREENMODE:
  503.     case MS_PROMOTE_REQUESTER:
  504.     case MS_PROMOTE_BEST_MODE:
  505.       if(N->Flags&DNF_PALETTE)
  506.         PaletteReq(N);
  507.       break;
  508.   }
  509. }
  510.  
  511. void GD_Move(LONG Num, BOOL Keyed)
  512. {
  513.   BOOL uplist=0;
  514.   struct DefaultNode *n,*wn;
  515.  
  516.   if(Keyed)
  517.   {
  518.     Num+=LVActive;
  519.   }
  520.  
  521.   if(Num>=NodeCnt)
  522.     Num=0;
  523.   else
  524.     if(Num<0)
  525.       Num=NodeCnt-1;
  526.       
  527.   
  528.   if(NodeCnt)
  529.   {
  530.     ObtainSemaphore(&MPSem->NodeSem);
  531.     n=GetActiveNode();
  532.     Num=(NodeCnt-1)-Num;
  533.     if(Num<LVActive) uplist=TRUE;
  534.     LVActive=Num;
  535.     if(wn=GetActiveNode())
  536.       if(uplist) wn=(struct DefaultNode *)wn->Def_Node.ln_Pred;
  537.         if(wn!=n)
  538.         {
  539.           LG_SetGadgetAttrs(GadControl,GD_LIST,
  540.                    GTLV_Labels,~0,
  541.                    TAG_DONE);
  542.           Remove((struct Node *)n);
  543.           Insert(&MPSem->PromotionList[CurrentList],(struct Node *)n,(struct Node *)wn);
  544.           LG_SetGadgetAttrs(GadControl,GD_LIST,
  545.                    GTLV_Labels,&MPSem->PromotionList[CurrentList],
  546.                    GTLV_MakeVisible,LVActive,
  547.                    GTLV_Selected,LVActive,TAG_DONE);
  548.         }  
  549.     ReleaseSemaphore(&MPSem->NodeSem); 
  550.   }
  551. }
  552.  
  553.  
  554. void GD_Depth(struct DefaultNode *N, LONG Depth, BOOL Keyed)
  555. {
  556.   LONG maxdepth;
  557.   
  558.   if(Keyed)
  559.     Depth+=N->Depth;
  560.   
  561.   if((N->ModeSelect==MS_PROMOTE_SCREENMODE || N->ModeSelect==MS_PROMOTE_REQUESTER || N->ModeSelect==MS_PROMOTE_BEST_MODE) && N->Flags & (DEPTH | DNF_PALETTE))//  (4.57.12)
  562.   {
  563.     if(Keyed)
  564.     {
  565.       struct DimensionInfo di;
  566.     
  567.  
  568.       if(GetDisplayInfoData(NULL,(UBYTE *)&di,sizeof(di),DTAG_DIMS,N->ModeID)>0)
  569.       {
  570.         maxdepth=DepthToSlider[min(di.MaxDepth,32)];//                                                 (4.57.20)
  571.         
  572.         if(Depth>maxdepth)
  573.           Depth=1;
  574.         else
  575.           if(Depth<1)
  576.             Depth=maxdepth;
  577.       }
  578.       else
  579.         Depth=1;
  580.       
  581.       LG_SetGadgetAttrs(GadControl,GD_DEPTH,
  582.                       GTSL_Level      ,Depth,
  583.                       TAG_DONE);
  584.     }
  585.     
  586.     N->Depth=SliderToDepth[Depth];//                                                                   (4.57.21)
  587.     WriteColorDisp(N);
  588.   }
  589. }
  590.  
  591. void GD_Force_Planar(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  592. {
  593.   SetDNFlag(N,DNF_FORCEPLANAR,Set,Keyed);
  594.   
  595.   if(Keyed)
  596.     SetOptionGadgets(N);      
  597. }
  598.  
  599. void GD_Blank_Border(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  600. {
  601.   SetDNFlag(N,DNF_BLANK_BORDER,Set,Keyed);
  602.   
  603.   if(Keyed) 
  604.     SetOptionGadgets(N);
  605. }
  606.  
  607. void GD_Behind(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  608. {
  609.   SetDNFlag(N,DNF_BEHIND,Set,Keyed);
  610.   
  611.   if(Keyed) 
  612.     SetOptionGadgets(N);
  613. }
  614.  
  615. void GD_3D_Default(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  616. {
  617.   SetDNFlag(N,DNF_3D_DEFAULT,Set,Keyed);
  618.  
  619.   Set3DGadgets(N);
  620. }
  621.  
  622. void GD_BackdropOpt(struct DefaultNode *N, LONG Flag, BOOL Keyed)
  623. {
  624.   if(Keyed)
  625.   {
  626.     N->BackdropType+=Flag;
  627.     if(N->BackdropType<0)
  628.       N->BackdropType=DNODE_BACKDROPTYPE_MAX;
  629.     if(N->BackdropType>DNODE_BACKDROPTYPE_MAX)
  630.       N->BackdropType=0;
  631.   }
  632.   else
  633.   {
  634.     N->BackdropType=Flag;
  635.   }
  636.   
  637.   if(N->BackdropType==DNODE_BACKDROPTYPE_IMAGE)
  638.     N->BackdropFlags|=BF_ON; // compatibility for pre-4.47
  639.     
  640.   SetBackdropGadgets(N);
  641. }
  642.  
  643. void GD_BackdropPick(struct DefaultNode *N)
  644. {
  645.   if(N)
  646.   {
  647.     if(SelectBackdropFile(GetString(MSG_BREQ_SELECT_BACKDROP),Win,N->BackdropFile))
  648.     {
  649.       FreeVec(N->BackdropFile);
  650.       N->BackdropFile=CopyString(filename,MEMF_PUBLIC);
  651.       SetBackdropGadgets(N);
  652.     }
  653.   }
  654. }
  655.  
  656. ULONG my_DoRequest(Object *Obj, Tag Tags,...);
  657.  
  658. void GD_BackdropCenter(struct DefaultNode *N, BOOL Set, BOOL Keyed)
  659. {
  660.   if(Keyed)
  661.   {
  662.     Set=!(N->BackdropFlags & BF_CENTER);
  663.   }
  664.   
  665.   N->BackdropFlags&=~BF_CENTER;
  666.   if(Set)
  667.     N->BackdropFlags|=BF_CENTER;
  668.   
  669.   if(Keyed)
  670.     SetBackdropGadgets(N);      
  671. }
  672.  
  673. /*
  674. #include <boopsi/requesters/root.h>
  675. #include <boopsi/requesters/palette.h>
  676.  
  677. void GD_BackdropColor(struct DefaultNode *N, BOOL Keyed)
  678. {
  679.   Object *BackdropPReq=0;
  680.   
  681.   if(!BackdropPReq)
  682.   {
  683.     LONG width;
  684.     
  685.     width=Win->Width/2;
  686.     BackdropPReq=NewObject(0,"palette.requester",
  687.                 PR_Colors,          1,
  688.                 PR_TextAttr,        TAttr,
  689.                 PR_ObtainPens,      1,
  690.                 PR_InitialLeftEdge, Win->LeftEdge+width/2,
  691.                 PR_InitialTopEdge,  Win->TopEdge+8,
  692.                 PR_InitialWidth,    width,
  693.                 PR_InitialHeight,   Win->Height-16,
  694.                 TAG_DONE);
  695.   }
  696.   
  697.   if(BackdropPReq)
  698.   {
  699.     if(my_DoRequest(BackdropPReq,
  700.                       PR_Window,  Win,
  701.                       PR_InitialPalette,  &N->BackdropRGB,
  702.                       TAG_DONE))
  703.     {
  704.       struct RGB *p;
  705.       
  706. //      p=(struct RGB *)BackdropPReq->pr_Palette;
  707. //      N->BackdropRGB=*p;      
  708.       SetBackdropGadgets(N);
  709.     }
  710.     DisposeObject(BackdropPReq);
  711.   }
  712. }
  713.  
  714. ULONG my_DoRequest(Object *Obj, Tag Tags,...)
  715. {
  716.   return(DoMethod(Obj, RM_DOREQUEST, &Tags));
  717. }
  718. */
  719.  
  720. #include <clib/extras/palettereq_protos.h>
  721. #include <extras/palettereq.h>
  722. extern  struct PaletteRequest *BackdropPReq;
  723.  
  724. void GD_BackdropColor(struct DefaultNode *N, BOOL Keyed)
  725. {
  726.   if(!BackdropPReq)
  727.   {
  728.     LONG width;
  729.     
  730.     width=Win->Width/2;
  731.     BackdropPReq=PR_AllocPaletteRequest(
  732.                 PR_Colors,          1,
  733.                 PR_TextAttr,        TAttr,
  734.                 PR_ObtainPens,      1,
  735.                 PR_InitialLeftEdge, Win->LeftEdge+width/2,
  736.                 PR_InitialTopEdge,  Win->TopEdge+8,
  737.                 PR_InitialWidth,    width,
  738.                 PR_InitialHeight,   Win->Height-16,
  739.                 TAG_DONE);
  740.   }
  741.   
  742.   if(BackdropPReq)
  743.   {
  744.     if(PR_DoPaletteRequest(BackdropPReq, 
  745.                       PR_Window,  Win,
  746.                       PR_InitialPalette,  &N->BackdropRGB,
  747.                       TAG_DONE))
  748.     {
  749.       struct RGB *p;
  750.       
  751.       p=(struct RGB *)BackdropPReq->pr_Palette;
  752.       N->BackdropRGB=*p;      
  753.       SetBackdropGadgets(N);
  754.     }
  755. //    PR_FreePaletteRequest(BackdropPReq); // freed in CleanUp()
  756.   }
  757. }
  758.  
  759.  
  760.  
  761. void GD_FE_SaveUse(void)
  762. {
  763.   ReturnFEMsg(MPFE_SAVEUSE);
  764. }
  765.  
  766. void GD_FE_UseDelete(void)
  767. {
  768.   ReturnFEMsg(MPFE_USEDELETE);
  769. }
  770.  
  771. void GD_FE_Never(void)
  772. {
  773.   ReturnFEMsg(MPFE_NEVER);
  774. }
  775.  
  776. void GD_FE_Cancel(void)
  777. {
  778.   ReturnFEMsg(MPFE_CANCEL);
  779. }
  780.  
  781. void ReturnFEMsg(ULONG Code)
  782. {
  783.   if(ForcedEditMsg)
  784.   {
  785.     ForcedEditMsg->Code=Code;
  786.     ReplyMsg((struct Message *)ForcedEditMsg);
  787.   }
  788.   
  789.   if(!(ForcedEditMsg=(struct MPMessage *)GetMsg(&MPSem->PrefsToDoPort)))//                             (4.62.7)
  790.   {
  791.     RemakeGads();
  792.   }
  793. //  LVActive=0;
  794. }
  795.  
  796. /*
  797. void ReturnFEMsg(ULONG Code)
  798. {
  799.   struct MPMessage *mpm;
  800.   
  801.   if(mpm=(struct MPMessage *)RemHead(&ForcedEditList))
  802.   {
  803.     mpm->Code=Code;
  804.     ReplyMsg((struct Message *)mpm);
  805.   }
  806.   if(IsListEmpty(&ForcedEditList))
  807.     ForcedEditMode=0;
  808.   
  809.   RemakeGads();
  810. }*/
  811.